
# this script reads in the meta-analysis data set, cleans things up and interpolates missing data (i.e. SDs)
# for the meta-analyses reported in
# Jaroslawska & Rhodes "Adult Age Differences in the Effects of Processing on Storage in Working Memory: A Meta-Analysis"

library(tidyr)

rm(list=ls())

### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### 
### ### ACCURACY
### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### 

accuracy = read.csv(file = "data/accuracy_data.csv")

str(accuracy)

accuracy=within(accuracy, {
  Young_single = as.numeric(as.character(Young_single))
  Old_single = as.numeric(as.character(Old_single))
  Young_dual = as.numeric(as.character(Young_dual))
  Old_dual = as.numeric(as.character(Old_dual))
})

### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### 
# remove every study that doesn't have DT observations for older adults
### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### 
noOldDT = accuracy[is.na(accuracy$Old_dual),]

accuracy = accuracy[!is.na(accuracy$Old_dual),]

# also remove observations that we dont want to include (e.g. averages of multiple training sessions)
accuracy=accuracy[accuracy$include==1,]

## for the primary meta-analyses on single / dual task accuracy
## we should split the data, as there are different numbers of observations/ conditions

if (!all(is.na(accuracy$Young_single) == is.na(accuracy$Old_single))){
  stop("Different single task observations for young and old")
}

accuracy$uniqueST <- as.integer(!is.na(accuracy$Young_single)) # note those with with a unique ST 

# pad the empty ST and N columns and average later
accuracy = fill(accuracy, c('Young_n', 'Old_n', 'Young_single', 'Old_single'), .direction = "down")

# flip percentage errors into 'accuracy'
accuracy[accuracy$Outcome_measure == "Percentage errors", c("Young_single", "Old_single", "Young_dual", "Old_dual")]=
  100 - accuracy[accuracy$Outcome_measure == "Percentage errors", c("Young_single", "Old_single", "Young_dual", "Old_dual")]

levels(accuracy$Outcome_measure)[which(levels(accuracy$Outcome_measure) == "Percentage errors")] = "100 - Percentage errors"

### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### 
# sort out variance estimate
### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### 
# turn SE into SD
# se = sd/sqrt(N) so sd = se*sqrt(N)

accuracy$Young_single_sd = accuracy$Young_single_var
accuracy$Old_single_sd = accuracy$Old_single_var
accuracy$Young_dual_sd = accuracy$Young_dual_var
accuracy$Old_dual_sd = accuracy$Old_dual_var

accuracy$Young_single_sd[accuracy$Variability_measure=="Standard error"] = with(subset(accuracy, Variability_measure=="Standard error"), Young_single_var*sqrt(Young_n))

accuracy$Young_dual_sd[accuracy$Variability_measure=="Standard error"] = with(subset(accuracy, Variability_measure=="Standard error"), Young_dual_var*sqrt(Young_n))

accuracy$Old_single_sd[accuracy$Variability_measure=="Standard error"] = with(subset(accuracy, Variability_measure=="Standard error"), Old_single_var*sqrt(Old_n))

accuracy$Old_dual_sd[accuracy$Variability_measure=="Standard error"] = with(subset(accuracy, Variability_measure=="Standard error"), Old_dual_var*sqrt(Old_n))

with(accuracy, prop.table(table(Variability_measure)))
### for missing values
# figure out what the typical ratio of SD to mean is and use this as a proxy...
YS_ratio = with(accuracy, mean(Young_single_sd/Young_single, na.rm=T))
YD_ratio = with(accuracy, mean(Young_dual_sd/Young_dual, na.rm=T))

OS_ratio = with(accuracy, mean(Old_single_sd/Old_single, na.rm=T))
OD_ratio = with(accuracy, mean(Old_dual_sd/Old_dual, na.rm=T))

accuracy$Young_single_sd[accuracy$Variability_measure=="Not reported"] = with(subset(accuracy, Variability_measure=="Not reported"), Young_single*YS_ratio)

accuracy$Young_dual_sd[accuracy$Variability_measure=="Not reported"] = with(subset(accuracy, Variability_measure=="Not reported"), Young_dual*YD_ratio)

accuracy$Old_single_sd[accuracy$Variability_measure=="Not reported"] = with(subset(accuracy, Variability_measure=="Not reported"), Old_single*OS_ratio)

accuracy$Old_dual_sd[accuracy$Variability_measure=="Not reported"] = with(subset(accuracy, Variability_measure=="Not reported"), Old_dual*OD_ratio)

# fill the SDs 
accuracy = fill(accuracy, c('Young_single_sd', 'Old_single_sd', "Young_dual_sd"), .direction = "down")

# and the type of processing task
accuracy$Type_of_processing_crude[accuracy$Type_of_processing_crude == ""] = NA
accuracy$Type_of_processing_fine[accuracy$Type_of_processing_fine == ""] = NA

accuracy = fill(accuracy, c('Type_of_processing_fine', 'Type_of_processing_crude'), .direction = "down")

accuracy = droplevels(accuracy)

newloc = "data/compiled_data/"
dir.create(newloc, showWarnings = F)

rm(list=c('newloc'))

save.image("data/compiled_data/accuracy_data.RData")

rm(list=ls())

### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### 
### ### REACTION TIME
### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### 

rt = read.csv("data/latency_data.csv")

str(rt)

if (!all(is.na(rt$Young_single) == is.na(rt$Old_single))){
  stop("Different single task observations for young and old")
}

rt=rt[rt$include==1,]

rt$uniqueST <- as.integer(!is.na(rt$Young_single)) # note those with with a unique ST 

# pad the empty ST and N columns
rt = fill(rt, c('Young_n', 'Old_n', 'Young_single', 'Old_single'), .direction = "down")

### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### 
# sort out variance estimate
### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### 
# turn SE into SD
# se = sd/sqrt(N) so sd = se*sqrt(N)

rt$Young_single_sd = rt$Young_single_var
rt$Old_single_sd = rt$Old_single_var
rt$Young_dual_sd = rt$Young_dual_var
rt$Old_dual_sd = rt$Old_dual_var

rt$Young_single_sd[rt$Variability_measure=="Standard error"] = with(subset(rt, Variability_measure=="Standard error"), Young_single_var*sqrt(Young_n))

rt$Young_dual_sd[rt$Variability_measure=="Standard error"] = with(subset(rt, Variability_measure=="Standard error"), Young_dual_var*sqrt(Young_n))

rt$Old_single_sd[rt$Variability_measure=="Standard error"] = with(subset(rt, Variability_measure=="Standard error"), Old_single_var*sqrt(Old_n))

rt$Old_dual_sd[rt$Variability_measure=="Standard error"] = with(subset(rt, Variability_measure=="Standard error"), Old_dual_var*sqrt(Old_n))

# the majority of studies don't report SDs, so we won't try to interpolate
with(rt, prop.table(table(Variability_measure)))

# fill the SDs 
rt[rt$Variability_measure!="Not reported",] = fill(subset(rt, Variability_measure!="Not reported"), c('Young_single_sd', 'Old_single_sd'), .direction = "down")

# and type of proc
rt$Type_of_processing_crude[rt$Type_of_processing_crude == ""] = NA
rt$Type_of_processing_fine[rt$Type_of_processing_fine == ""] = NA

rt = fill(rt, c('Type_of_processing_fine', 'Type_of_processing_crude'), .direction = "down")

rt = droplevels(rt)

save.image("data/compiled_data/rt_data.RData")

